package cn.flying.cloud.oauth.server.configuration.session;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;

/**
 * session 共享配置
 *
 * @author: admin
 * @date: 2024年05月22日 11:03
 * @version: 1.0
 */
@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 86400 * 30) // 设置Session最大不活动时间，这里是30天，24*60*60*30
public class SessionConfiguration {


//    /**
//     * Session 序列化 不要这种序列化方式，有问题
//     *
//     * @return
//     */
//    @Bean
//    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
//        Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);
//        //解决查询缓存转换异常的问题
//        ObjectMapper om = new ObjectMapper();
//        //设置在生成 json 串时，对象中的成员的可见性
//        om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);
//        //存储到redis的json将是有类型的数据
//        //指定序列化输入的类型，类必须是非final修饰的，final修饰的类，比如String,Integer等会跑出异常
//        om.activateDefaultTyping(om.getPolymorphicTypeValidator(), ObjectMapper.DefaultTyping.NON_FINAL);
//        jackson2JsonRedisSerializer.setObjectMapper(om);
//        return jackson2JsonRedisSerializer;
//    }


    /**
     * 仅为 Session 配置 JDK 序列化器
     *
     * @return
     */
    @Bean
    public RedisSerializer<Object> springSessionDefaultRedisSerializer() {
        return new JdkSerializationRedisSerializer();
    }

    /**
     * 配置 SessionRepository，专门用于 Session 存储，使用 JDK 序列化
     * @param
     * @return
     */
//    @Bean
//    public RedisIndexedSessionRepository sessionRepository(RedisConnectionFactory redisConnectionFactory) {
//        RedisTemplate<Object, Object> template = new RedisTemplate<>();
//        template.setConnectionFactory(redisConnectionFactory);
//        // 使用 JDK 序列化器处理 Session
//        template.setDefaultSerializer(new JdkSerializationRedisSerializer());
//        template.setKeySerializer(new StringRedisSerializer());
//        template.setHashKeySerializer(new StringRedisSerializer());
//
//        // 其他 Session 相关配置
//        return new RedisIndexedSessionRepository(template);
//    }

}